#ifndef DISTANCE_H
#define DISTANCE_H

#include <opencv2/opencv.hpp>

using namespace cv;

#include <fstream>
#include <iostream>
#include <cstdlib>

using namespace std;

//*********************** 图像 参数 ********************************
extern const int imageWidth;                             //摄像头的分辨率
extern const int imageHeight;

//*********************** 三维建模 参数 ********************************
//extern Size imageSize;

extern Mat rgbImageL, grayImageL;
extern Mat rgbImageR, grayImageR;
//extern Mat rectifyImageL, rectifyImageR;

//extern Rect validROIL;//图像校正之后，会对图像进行裁剪，这里的validROI就是指裁剪之后的区域
//extern Rect validROIR;

//extern Mat mapLx, mapLy, mapRx, mapRy;     //映射表
//extern Mat Rl, Rr, Pl, Pr, Q;              //校正旋转矩阵R，投影矩阵P 重投影矩阵Q
extern Mat xyz;              //三维坐标
extern Mat color_main;      //三维彩色图像
extern Mat canvas_main;

//extern Point origin;         //鼠标按下的起始点
//extern Rect selection;      //定义矩形选框
//extern bool selectObject;    //是否选择对象

//extern Ptr<StereoSGBM> sgbm;

//extern Mat cameraMatrixL,distCoeffL,cameraMatrixR,distCoeffR,T,rec,R;



//static void saveXYZ(const char* filename, const Mat& mat);
void GenerateFalseMap(cv::Mat &src, cv::Mat &disp); //给深度图上色
void stereo_match(int, void*);      //鼠标操作回调
static void onMouse(int event, int x, int y, int, void*);

/* 初始化 */
void tf_init();
/* 通过全局变量rgbImageL, grayImageL输入
 * 通过stereo_match更新三维信息xyz，并把三维彩图color_main更新*/
void tf_dis();
/* 调用范例:
 * //1、帧获取
        left >> rgbImageL;
        right >> rgbImageR;

        if(rgbImageL.empty()||rgbImageR.empty())
        {
            cout <<"video empty" <<endl;
            break;
        }
        //2、深度处理
        tf_dis();
*/

/* obj/new_obj:新旧二维像素点
 * show_flag:是否imshow显示输出(true)
 * 把识别出的点标在图像上,结果同步到color_main+rgbImageL，
 * 如果不想imshow输出可以访问color_main+rgbImageL*/
void show_dect_point(vector<Point> obj, Point new_obj, bool show_flag);
/* size是每张图片的大边尺寸(320),
 * show_flag是否imshow显示输出(true),
 * 通过全局变量canvas_main返回平行线画布图像*/
void parallel_lines_Mat(double size, bool show_flag);

#endif // DISTANCE_H
